package com.haixiaoke.saas.repository.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.haixiaoke.saas.repository.core.BaseEntity;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 订单对象 biz_order
 *
 * @author haixiaoke
 * @date 2023-04-13
 */
@Data
public class  Order extends BaseEntity {
    private static final long serialVersionUID = 1L;

    //订单状态(1：已支付；2：未支付；3：已入住；4：待验房；5：已验房；6：待退租；7已退租；8：已完成；9：已取消；10：已退款；11：待退款)
    public static final Integer ORDER_STATE_PAYMENT = 1;               //已支付
    public static final Integer ORDER_STATE_UN_PAYMENT = 2;            //未支付
    public static final Integer ORDER_STATE_CHECK_IN = 3;                //已入住
    public static final Integer ORDER_STATE_UN_INSPECTION = 4;           //待验房
    public static final Integer ORDER_STATE_INSPECTION = 5;              //已验房
    public static final Integer ORDER_STATE_UN_CHECK_OUT = 6;           //待退租
    public static final Integer ORDER_STATE_CHECK_OUT = 7;              //已退租
    public static final Integer ORDER_STATE_COMPLETION = 8;                  //已完成
    public static final Integer ORDER_STATE_CANCELED = 9;                  //已取消
    public static final Integer ORDER_STATE_REFUND = 10;                  //已退款
    public static final Integer ORDER_STATE_UN_REFUND = 11;                  //待退款


    public static final Integer CLEANING_TYPE_NO = 0;                   //不购买保洁费
    public static final Integer CLEANING_TYPE_YES = 1;                  //购买保洁费

    public static final Integer ORDER_TYPE_OWNER = 0;     //订单属性：自己的订单
    public static final Integer ORDER_TYPE_SHARE_WITH = 1;     //订单属性：同住人订单

    public static final Integer PAY_TYPE_MINI_PROGRAM = 1;              //支付类型：小程序

    /**
     * 订单来源：小程序
     */
    public static final Integer ORDER_SOURCE_MINI_PROGRAM = 1;

    public static final String REDIS_ORDER_KEY = "ORDER_ID:";            //缓存订单id的前缀
    public static final String REDIS_ORDER_KEY_LOCK = "order:unpay:";  //缓存订单id锁单的前缀
    public static final String REDIS_ORDER_KEY_RELET = "order:relet:";  //续租订单存放的前缀

    /**
     * 订单id
     */
    private String orderId;

    /**
     * 组织id
     */
    private Long orgId;

    /**
     * 房屋id
     */
    private String houseId;

    /**
     * 公寓配置id
     */
    private Long allocationId;

    /**
     * 续租次数
     */
    private Integer reletNum;

    /**
     * 订单价格总额
     */
    private Double priceAmounts;

    /**
     * 订单退款总金额
     */
    private Double totalRefundAmounts;

    /**
     * 订单退款金额
     */
    private Double refundAmounts;

    /**
     * 入住时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date checkInTime;

    /**
     * 实际入住时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date realityCheckInTime;

    /**
     * 退房时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date checkOutTime;

    /**
     * 实际退房时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date realityCheckOutTime;

    /**
     * 是否购买保洁费(0:没购买；1:购买)
     */
    private Integer cleaningType;

    /**
     * 订单状态(1：已支付；2：未支付；3：已入住；4：待验房；5：已验房；6：待退租；7已退租；8：已完成；9：已取消；10：已退款；11：待退款)
     */
    private Integer orderState;

    /**
     * 预约人id
     */
    private String reservationId;

    /**
     * 预定人名称
     */
    private String reservationName;

    /**
     * 预定人身份证号码
     */
    private String reservationCardNumber;

    /**
     * 预订人电话
     */
    private String reservationPhone;


    /**
     * 订单来源（1：嗨小克小程序；）
     */
    private Integer orderSource;

    /**
     * 订单支付方式（1：小程序）
     */
    private Integer payType;

    /**
     * 订单支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date payTime;

    /**
     * 逻辑删除标志(0代表存在 2代表删除）
     */
    private Integer delFlag;

    /**
     * 房屋快照数据(json)
     */
    private String houseContent;

    /**
     * 房屋配置快照数据(json)
     */
    private String allocationContent;

    /**
     * 房屋设施价格状态快照数据(json)
     */
    private String facilitiesContent;

    /**
     * 省
     */
    private Long provinceId;

    /**
     * 省名称
     */
    private String provinceName;

    /**
     * 市
     */
    private Long cityId;

    /**
     * 市名称
     */
    private String cityName;

    /**
     * 区
     */
    private Long districtId;

    /**
     * 区名称
     */
    private String districtName;

    /**
     * 街道
     */
    private Long streetId;

    /**
     * 街道名称
     */
    private String streetName;

    /**
     * 社区
     */
    private Long communityId;

    /**
     * 社区名称
     */
    private String communityName;

    /**
     * 地址
     */
    private String address;

    /**
     * 完整地址 (xx省xx市xx区xx街道xx小区xx栋xx单元xx号)
     */
    private String fullAddress;

    /**
     * 小区id
     */
    private String residenceCommunityId;

    /**
     * 小区名称
     */
    private String residenceCommunityName;

    /**
     * 楼栋
     */
    private Long buildingNum;

    /**
     * 楼栋名称
     */
    private String buildingNumName;


    /**
     * 单元
     */
    private Long unit;

    /**
     * 单元名称
     */
    private String unitName;

    /**
     * 房号
     */
    private String roomNumber;

    /**
     * 楼层
     */
    private Long floor;

    /**
     * 面积
     */
    private BigDecimal area;

    /**
     * 室
     */
    private Long room;

    /**
     * 厅
     */
    private Long hall;

    /**
     * 卫
     */
    private Long toilet;


    /**
     * 房型
     * eg: 两房一厅一卫
     */
    private String houseType;


    /**
     * 公寓名
     * 小区名 + 户型
     * eg: 胜利小区 三房两厅
     */
    private String title;

    /**
     * 总楼层  自定义字段，不为数据表字段
     */
    private Long totalFloor;

    /**
     * 房屋图片 自定义字段，不为数据表字段
     */
    private String apartmentPicture;

    /**
     * 保洁费 自定义字段，不为数据表字段
     */
    private Double cleaningPrice;

    /**
     * 押金 自定义字段，不为数据表字段
     */
    private Double cashPledge;

    /**
     * 产权所有人id
     */
    private String houseOwnerId;

    /**
     * 产权所有人名字
     */
    private String houseOwnerName;

    /**
     * 产权所有人电话
     */
    private String houseOwnerPhone;

    /**
     * 房屋详细信息   自定义字段
     * 小区命+楼栋+单元+房号
     */
    private String fullRoom;

    /**
     * 订单状态集合，自定义字段
     */
    private int[] orderStateList;

    /**
     * 订单失效时间戳
     */
    private Long expiresTimeTimestamp;

    /**
     * 订单总金额，带小数点
     */
    private String priceAmountsDecimal;

    /**
     * 房管家电话，自定义字段
     */
    private String stewardPhone;

    /**
     * 订单属性，0：自己的订单；1：同住人订单
     */
    private Integer orderType;

    /**
     * 公寓类型 1短租公寓 2长租公寓 自定义字段
     */
    private Integer apartmentType;

    /**
     * 支付类型 自定义字段
     */
    private PayType apartmentPayType;

    /**
     * 房屋绑定锁的品牌id 自定义字段
     */
    private Integer brandId;
}